Nginx Proxy Manager(NPM) ์ค์น ๋ฐ Cloudflare ๋ฌด๋ฃ SSL ์ค์ ๊ฐ์ด๋
ํ์๋ฒ๋ฅผ ์ด์ํ ๋ ์ฌ๋ฌ ๊ฐ์ ์๋น์ค๋ฅผ ๋๋ฉ์ธ์ผ๋ก ์ฐ๊ฒฐํ๋ ค๋ฉด **์ญ๋ฐฉํฅ ํ๋ก์(Reverse Proxy)**๊ฐ ํ์์ ๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ๊ฐ์ฅ ์ฌ์ฉํ๊ธฐ ์ฌ์ด **Nginx Proxy Manager(NPM)**๋ฅผ Docker Compose๋ก ์ค์นํ๊ณ , Cloudflare DNS Challenge๋ฅผ ํตํด 80๋ฒ ํฌํธ ๊ฐ๋ฐฉ ์์ด ๋ฌด๋ฃ ์์ผ๋์นด๋ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ์ต๋๋ค.
1. Nginx Proxy Manager(NPM)๋?
- GUI ๊ธฐ๋ฐ: ๋ณต์กํ Nginx ์ค์ ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์ค์ ์ ๊ด๋ฆฌํฉ๋๋ค.
- ์๋ SSL ๋ฐ๊ธ: Let's Encrypt๋ฅผ ํตํด ํด๋ฆญ ๋ช ๋ฒ์ผ๋ก SSL(HTTPS)์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ํฌ์๋ฉ ๊ด๋ฆฌ: ๋๋ฉ์ธ๋ณ๋ก ๋ด๋ถ IP์ ํฌํธ๋ฅผ ๋งคํํด์ค๋๋ค.
2. Docker Compose๋ก NPM ์ค์นํ๊ธฐ
LXC ์ปจํ ์ด๋ ๋๋ VM์ Docker๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
2.1 docker-compose.yml ์์ฑ
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP
- '81:81' # ๊ด๋ฆฌ์ UI
- '443:443' # HTTPS
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt2.2 ์คํ ๋ฐ ๋ก๊ทธ์ธ
docker compose up -d- ์ ์ ์ฃผ์:
http://[์๋ฒ-IP]:81 - ๊ธฐ๋ณธ ๊ณ์ :
[email protected]/changeme(๋ก๊ทธ์ธ ํ ์ฆ์ ๋ณ๊ฒฝ ๊ถ์ฅ)
3. Cloudflare DNS๋ฅผ ์ด์ฉํ ๋ฌด๋ฃ SSL ์ค์ (DNS Challenge)
์ผ๋ฐ์ ์ธ HTTP-01 ๋ฐฉ์์ 80๋ฒ ํฌํธ๊ฐ ์ด๋ ค ์์ด์ผ ์ธ์ฆ์ด ๊ฐ๋ฅํ์ง๋ง, DNS Challenge ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํฌํธ๋ฅผ ์ด์ง ์๊ณ ๋ **์์ผ๋์นด๋ ์ธ์ฆ์(*.domain.com)**๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์์ต๋๋ค.
3.1 Cloudflare API ํ ํฐ ์์ฑ
- Cloudflare ๋์๋ณด๋ โ ๋ด ํ๋กํ โ API ํ ํฐ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ํ ํฐ ์์ฑ โ Zone DNS ํธ์ง ํ ํ๋ฆฟ์ ์ ํํฉ๋๋ค.
- ์ฌ์ฉ ๊ถํ:
Zone - DNS - Edit,Zone - Zone - Read๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. - ์์ญ ๋ฆฌ์์ค:
๋ชจ๋ ์์ญ๋๋ ํน์ ๋๋ฉ์ธ์ ์ ํํ๊ณ ํ ํฐ์ ์์ฑํ ๋ค ๋ฉ๋ชจํด ๋ก๋๋ค.
3.2 NPM์์ SSL ์ธ์ฆ์ ๋ฐ๊ธ
- NPM ๊ด๋ฆฌ ํ์ด์ง์์ SSL Certificates โ Add SSL Certificate โ Let's Encrypt๋ฅผ ํด๋ฆญํฉ๋๋ค.
- Domain Names:
*.yourdomain.com,yourdomain.com์ ์ ๋ ฅํฉ๋๋ค. - Use a DNS Challenge๋ฅผ ํ์ฑํ(ON) ํฉ๋๋ค.
- DNS Provider:
Cloudflare๋ฅผ ์ ํํฉ๋๋ค. - Credentials File Content: ์๊น ์์ฑํ API ํ ํฐ์
dns_cloudflare_api_token =๋ท๋ถ๋ถ์ ๋ถ์ฌ๋ฃ์ต๋๋ค. - I Agree... ์ฒดํฌ ํ Save๋ฅผ ๋๋ฅด๋ฉด ๋! (์ฝ 1~2๋ถ ์์)
4. ํ๋ก์ ํธ์คํธ(Proxy Host) ์ค์
์ด์ ์ค์ ์๋น์ค์ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํด ๋ด ์๋ค.
- Hosts โ Proxy Hosts โ Add Proxy Host ํด๋ฆญ.
- Domain Names:
vscode.yourdomain.com(์์) - Forward Hostname/IP: ์ฐ๊ฒฐํ ์๋น์ค์ ๋ด๋ถ IP.
- Forward Port: ํด๋น ์๋น์ค์ ํฌํธ.
- SSL ํญ์์ ๋ฐฉ๊ธ ์์ฑํ Cloudflare ์์ผ๋์นด๋ ์ธ์ฆ์๋ฅผ ์ ํํฉ๋๋ค.
- Force SSL, HTTP/2 Support, Websockets Support๋ฅผ ๋ชจ๋ ์ฒดํฌํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
5. ์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
Q. 80๋ฒ ํฌํธ๋ฅผ ๊ผญ ๋ซ์๋ ๋๋์?
A. DNS Challenge ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด SSL ์ธ์ฆ์ ๋ฐ๊ธ ์์๋ 80๋ฒ ํฌํธ๊ฐ ํ์ ์์ง๋ง, ์ผ๋ฐ ์ฌ์ฉ์๊ฐ HTTP๋ก ์ ์ํ์ ๋ HTTPS๋ก ๊ฐ์ ๋ฆฌ๋ค์ด๋ ํธ(Force SSL)ํ๋ ค๋ฉด 80๋ฒ ํฌํธ๊ฐ ์ด๋ ค ์์ด์ผ ํฉ๋๋ค. ๋ณด์์ด ๊ทน๋๋ก ์ค์ํ๋ค๋ฉด 80๋ฒ์ ๋ซ๊ณ HTTPS(443)๋ก๋ง ์ ์ํ๊ฒ ํ ์ ์์ต๋๋ค.
Q. API ํ ํฐ ๊ถํ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค.
A. Cloudflare์์ ํ ํฐ์ ๋ง๋ค ๋ DNS Edit ๊ถํ๊ณผ Zone Read ๊ถํ์ด ๋ชจ๋ ์๋์ง ๋ค์ ํ์ธํ์ธ์.
๊ด๋ จ ๊ฒ์์ด: nginx proxy manager docker, cloudflare ssl ์ค์ , ๋ฌด๋ฃ ์์ผ๋์นด๋ ์ธ์ฆ์, npm letsencrypt cloudflare, ํ์๋ฒ ์ธ๋ถ ์ ์